@@echo off


:: Imdisk 是一款开源的虚拟盘工具
可以加载虚拟光盘文件
可以创建、加载、读写虚拟磁盘文件；可以创建
读写虚拟内存盘；可以动态增加虚拟盘容量。

==================================================

通过实例了解 imdisk.exe 的用法。

注：下面的命令需要以管理员身份运行（在 cmd.exe 上点右键，选择“以管理员身份运行”）。

装载虚拟光盘 D:\test.iso 到 D:\mount\test。
　　imdisk -a -f D:\test.iso -m D:\mount\test

装载虚拟光盘 D:\test.iso 到第一个可用的盘符。
　　imdisk -a -f D:\test.iso -m #:

在“物理内存”中创建一个 32M 大小的虚拟磁盘，盘符为 Z，并格式化为 NTFS 格式。
　　imdisk -a -o awe -m Z: -s 32M -p "/fs:NTFS /q /y"
相当于下面两条命令：
　　imdisk -a -o awe -m Z: -s 32M
　　format Z: /fs:NTFS /q /y

在“物理内存”中创建一个“比可用物理内存小 2G”的虚拟磁盘，盘符为 Z，并格式化为 NTFS 格式。
　　imdisk -a -o awe -m Z: -s -2G -p "/fs:NTFS /q /y"

imdisk -a -o awe -m A: -s -2G -p "/fs:NTFS /q /y"
imdisk -a -t vm -s 6G -p "/fs:ntfs /v:Temp /A:512 /q /y" -m R:

imdisk -a -o awe -s 1G -p "/fs:ntfs /v:Cache /A:512 /q /y" -m X:






在“虚拟内存”中创建一个 32M 大小的虚拟磁盘，盘符为 Z，并格式化为 NTFS 格式。
　　imdisk -a -t vm -m Z: -s 32M -p "/fs:NTFS /q /y"

在 D 盘创建一个 32M 大小的磁盘文件 1.img，并将其挂载到 Z 盘，格式化为 NTFS 格式。
对 Z 盘的读写直接就是对文件的读写。
注意：创建时会覆盖已存在的文件，没有警告。
　　imdisk -a -t file -f D:\1.img -m Z: -s 1G -p "/fs:NTFS /q /y"

    imdisk -a -t file -f D:\1.img -m R: -s 1G -p "/fs:NTFS /q /y"
将 D:\1.img 先复制到内存中，然后再挂载到 Z 盘。
对 Z 盘的读写就是对内存的读写，D:\1.img 中的内容不会被改变。
　　imdisk -a -t file -o awe -f D:\1.img -m Z:

将 D:\1.img 先复制到虚拟内存中 R 盘，R 盘读写。
    imdisk -a -t vm -o rw -f D:\1.img -m R:
    imdisk -e -s 4G -m R:

    imdisk -a -t vm -o rw -f D:\1.img -m R:





　　imdisk -a -t file -o ro -f D:\1.img -m Z:

将 D:\1.img 读写的方式挂载到 Z 盘，Z 盘只能读，不能写。
　　imdisk -a -t file -o rw -f D:\1.img -m Z:







列出虚拟磁盘。
　　imdisk -l
列出虚拟磁盘编号。
　　imdisk -l -n
查看 Z 盘的相信信息。
　　imdisk -l -m Z:
查看第 0 号磁盘的详细信息。
　　imdisk -l -u 0

增加 Z 盘的大小（再增加 32 MB）：
　　imdisk -e -m Z: -s 32M

卸载虚拟磁盘 Z（卸载时必须关闭所有正在使用 Z 盘的软件，比如资源管理器），释放磁盘资源。
　　imdisk -d -m Z:
强行卸载虚拟磁盘 Z（无论 Z 盘是否正在被使用），释放磁盘资源。
　　imdisk -D -m Z:
移除虚拟磁盘 Z，但不释放磁盘资源，相当于回收盘符，而磁盘内容丢在一边不管它。
只有当虚拟磁盘没有响应，无法卸载的时候才使用该方法。
　　imdisk -R -m Z:

对于没有指定盘符的虚拟磁盘，可以使用磁盘编号进行卸载，比如卸载第 0 号磁盘：
　　imdisk -d -u 0

==================================================

imdisk.exe 的帮助内容

语法：

查看版本：
imdisk --version

加载磁盘：
imdisk -a -t 类型 -m 挂载点 [-o 选项1[,选项2 ...]] [-f|-F 文件]
　　　 [-s 大小] [-b 偏移] [-v 分区] [-S 扇区大小] [-u 磁盘编号]
　　　 [-x 扇区/磁道] [-y 磁道/柱面] [-p "format 命令的参数"] [-P]

卸载磁盘：
imdisk -d|-D [-u 磁盘编号 | -m 挂载点] [-P]

移除磁盘：
imdisk -R -u 磁盘编号

列出磁盘：
imdisk -l [-n] [-u 磁盘编号 | -m 挂载点]

编辑磁盘状态：
imdisk -e [-s 大小] [-o 选项1[,选项2 ...]] [-u 磁盘编号 | -m 挂载点]

------------------------------

-a
　　　　加载虚拟磁盘。

-d
　　　　卸载虚拟磁盘，并释放所有资源。使用 -D 可以强制卸载，无论设备释放正在使用。

-R
　　　　移除无响应的虚拟磁盘。只有当虚拟磁盘出现某种问题导致无法以安全的方式卸载时，才应将其作为最后的手段。例如，对于代理型虚拟磁盘，有时在代理通信失败时会发生这种情况。请注意，此操作不会尝试“卸载文件系统”或“锁定警告”！

-e
　　　　修改现有虚拟磁盘。

　　　　配合 -s 参数可以扩展虚拟磁盘大小。请注意，磁盘扩展后需要重新格式化，否则只能使用之前格式化的空间。除非您当前运行的是 Windows 2000 或更高版本，而且虚拟磁盘的文件系统是 NTFS 才不需要重新格式化。

　　　　配合 -o 参数可以更改虚拟磁盘的介质特征。只能更改“是否可写、是否可移动”特征。

------------------------------

-t 类型
　　　　选择虚拟磁盘的存储类型，取值为 vm、file、proxy（默认为 vm）。

vm
　　　　使用系统的“虚拟内存”创建虚拟磁盘（读写磁盘就是在读写虚拟内存）。通过 -f 参数，可以将指定的文件加载到虚拟磁盘所在的内存中。

file
　　　　使用文件创建虚拟磁盘（读写磁盘就是在读写文件），通过 -f 参数指定文件路径。

proxy
　　　　使用代理创建虚拟磁盘，通过管道访问磁盘数据。通过 -f 参数指定的命名管道。

------------------------------

-f file 或 -F file
　　　　指定要使用的文件，或指定代理型虚拟磁盘的命名管道名称。对于代理型虚拟磁盘，如果 -o 选项包括 ip 或 comm，则 file 可以是远程服务器地址或 COM 端口。

　　　　你可以使用 -f 指定 DOS 样式的路径，例如 C:\dir\image.bin 或 \\server\share\image.bin，也可以使用 -F 指定 NT 样式的本地路径，例如 \Device\Harddisk0\Partition1\image.bin。这使得可以指定没有分配盘符的磁盘或通信设备上的文件。

-l
　　　　列出已配置的设备。如果同时使用 -u 或 -m，则显示有关该设备的详细信息。

-n
　　　　打印 ImDisk 设备名称时，仅打印不带 \Device\ImDisk 前缀的单元号。

-s 大小
　　　　指定虚拟磁盘的大小。默认单位是字节，可以使用后缀 b、k、m、g、t、K、M、G 或 T，分别表示 512 字节块的数量、千字节、百万字节、十亿字节、万亿字节、千字节、兆字节、千兆字节和太字节。后缀也可以是 %，表示在创建 vm 类型虚拟磁盘时可用空闲物理内存的百分比。

　　　　对于“使用不存在的文件路径创建文件型虚拟磁盘”或“创建不带 -f 或 -F 参数的 vm 型虚拟磁盘”的情况，必须指定磁盘大小，其它情况可以不指定磁盘大小。如果在创建文件型虚拟磁盘时指定了磁盘大小，则该文件将被调整为指定的大小。

　　　　大小可以是负值，表示可以物理内存的大小减去此大小。例如 -400M 的虚拟磁盘的大小将是可用物理内存总数减去 400 MB。

-b 偏移量
　　　　从文件的指定偏移位置开始将文件加载到虚拟磁盘的起始位置，读写操作将以此偏移位置为起点。

　　　　对于一些已知格式的非 raw 类型的磁盘镜像，可以使用 auto 作为偏移值。目前支持自动选择的文件格式是 Nero 的 .nrg 和微软的 .sdi 镜像文件。

-v 分区编号
　　　　指定在装载包含主引导记录和分区表的原始硬盘映像文件时要装入的分区的编号。用 1-4 来指定主分区，用 5-8 来指定扩展分区。

-S 扇区大小
　　　　用于虚拟磁盘设备的扇区大小。默认值为 512 字节，除了那些默认使用 2048 字节的 CD-ROM/DVD-ROM 设备。

-x 扇区数/磁道
　　　　请参阅下面的 -y 选项的说明。

-y 磁道数/柱面
　　　　-x 和 -y 选项可用于指定“每柱面磁道数”和“每磁道”。

　　　　这对于构建可引导映像以便以后写入到物理设备非常有用。默认值取决于使用 -o 选项指定的设备类型。如果指定了 fd 选项，则默认值基于虚拟磁盘的大小，例如，1440K 镜像为“2磁道/柱面”和“18扇区/磁道”。

-p "format 命令的参数"
　　　　如果指定了 -p，则在创建新虚拟磁盘时，将调用“format”命令来格式化磁盘。"format 命令的参数" 必须是带双引号的字符串。该字符串将添加到以 'format' 开头的命令行中。您通常会指定类似 "/fs:ntfs /q /y" 的内容，即创建具有快速格式化且无需用户交互的 NTFS 文件系统。

------------------------------

-o 选项
　　　　设置或重置选项。

ro
　　　　指定虚拟磁盘为只读。对于 vm 类型的虚拟磁盘，仅当指定了 -f 选项时，才能使用此选项。

rw
　　　　指定虚拟磁盘可读写。这是默认设置。它可以与 -e 参数一起使用，以将现有的只读虚拟磁盘设置为可写。

sparse
　　　　在镜像文件上设置 NTFS 稀疏属性（NTFS 压缩）。这对代理型或 vm 型的虚拟磁盘没有效果。

rem
　　　　指定虚拟磁盘为可移动磁盘（相对于固定磁盘）。这会更改驱动程序返回给操作系统的设备属性信息。例如，这会更改某些文件系统的缓存写入方式。

fix
　　　　指定虚拟磁盘为固定磁盘（相对于可移动磁盘）。这是默认设置。与 -e 参数一起使用，以将现有可移动虚拟磁盘设置为固定磁盘。

saved
　　　　清除现有虚拟磁盘中的“镜像已被修改”标志。修改映像时，此标志由驱动程序设置，并显示在虚拟磁盘的 -l 输出中。saved 选项仅对 -e 参数有效。（可用于监视磁盘有没有被改动）

　　　　请注意，虚拟软盘或虚拟光盘始终是只读和可移动设备，并且无法更改。

cd
　　　　指定虚拟磁盘为虚拟光盘。如果使用 -f 选项指定的文件的扩展名是 .iso、.nrg 或 .bin，则这是缺省值。

fd
　　　　指定虚拟磁盘为虚拟软盘。如果虚拟磁盘的大小是 160K，180K，320K，360K，640K，720K，820K，1200K，1440K，1680K，1722K，2880K，123264K 或 234752K 中的任何一个，则这是默认值。

hd
　　　　指定虚拟磁盘为虚拟硬盘。除非文件扩展名或大小与默认为 cd 或 fd 选项的标准相匹配，否则这是默认值。

raw
　　　　指定虚拟磁盘为“未知”设备。系统不会尝试使用此类设备自行执行任何操作，但它可以与第三方驱动程序结合使用，第三方驱动程序可以使用此虚拟磁盘作为存储后台。

ip
　　　　只能与代理类型的虚拟磁盘一起使用。使用此选项，用户模式服务组件将被初始化以通过 TCP/IP 连接到 ImDisk 存储服务器。-f 参数可以指定远程主机地址，地址中可以使用冒号指定端口号，例如 httpTask://xxx.xxx.xxx.xxx:xxxx

comm
　　　　只能与代理类型的虚拟磁盘一起使用。使用此选项，用户模式服务组件将被初始化以通过 COM 端口连接到 ImDisk 存储服务器。-f 参数可以指定要连接的 COM 端口，端口后面可以跟冒号，空格，然后是设备设置选项字符串，其语法与 MODE 命令相同。

shm
　　　　只能与代理类型的虚拟磁盘一起使用。使用此选项，驱动程序将使用共享内存块与同一计算机上的存储服务器进行通信，以传输 I/O 数据。

awe
　　　　只能与文件型虚拟磁盘一起使用。使用此选项，驱动程序将映像文件的内容复制到物理内存。更改将不会写入到映像文件。如果此选项没有与 -f 一起使用，则仅使用物理内存而不加载映像文件。在这种情况下，需要使用 -s 参数来指定内存大小。此选项需要 awealloc 驱动程序，该驱动程序需要 Windows 2000 或更高版本。

bswap
　　　　指示驱动程序交换从映像文件读取或写入的每对字节（大端序或小端序）。在检查来自某些嵌入式系统的镜像时很有用，其中的数据以反字节序存储。

shared
　　　　指示驱动程序以共享写入模式打开映像文件，即使以写入模式打开的映像也是如此。这对于“将多分区映像中的每个分区同时挂载为不同的虚拟磁盘”非常有用。如果使用不正确的偏移量和大小参数，它可能会损坏文件系统，因此请谨慎使用！

par
　　　　并行 I/O。适用于文件型虚拟磁盘。设置此标志后，驱动程序会在与原始请求相同的线程上下文中，将虚拟磁盘的读写请求直接发送到处理映像文件的文件系统驱动程序。在某些情况下，此标志可以提高性能，尤其是当您使用由存储在其它虚拟磁盘、网络文件共享或类似存储上的映像文件支持的多层虚拟磁盘时。

　　　　在所有方案中都不支持此标志，具体取决于需要完成对映像文件的请求的其他驱动程序。如果底层驱动程序不能同时处理 I/O 请求，它还可能降低性能或导致读取和写入失败。

------------------------------

-u 磁盘编号
　　　　与 -a 一起，为 imdisk 设备请求一个特定的设备编号，而不是自动分配。与 -d 或 -l 一起指定要删除或查询的虚拟磁盘的编号。

-m 挂载点
　　　　指定新虚拟磁盘、要查询的虚拟磁盘或要删除的虚拟磁盘的盘符或挂载点。创建新虚拟磁盘时，可以指定 #: 作为挂载点，在这种情况下，将使用第一个可用的盘符。

-P
　　　　保存状态。与 -a 一起使用，将虚拟磁盘的状态保存到注册表中，以便在加载驱动程序时自动重新创建相同的虚拟磁盘，这通常在系统启动期间发生。在使用 -d 或 -D 时，此类状态信息也将从注册表中删除。以这种方式保存的信息有一些限制。只保存直接在内核级驱动程序中实现的功能，因此，例如使用 -p 选项格式化虚拟磁盘将不会被保存。

==================================================

imdisk 误操作会引起一些问题：

例如用盘符 Z 创建了一个虚拟磁盘，没有卸载，又用盘符 Z 创建了一个虚拟磁盘，会造成之前创建的虚拟磁盘无法访问。避免这种问题的方法是在创建磁盘之前先判断 Z 盘是否存在：

　　if not exist z: imdisk -a -o awe -s 32M -m Z: -p "/fs:ntfs /q /y"

对于没有盘符的虚拟磁盘，可以通过编号进行卸载，例如：

　　imdisk -d -u 0

如果在创建虚拟盘时使用了硬盘分区的盘符，造成硬盘分区无法访问，可以在卸载虚拟磁盘后，用系统的“磁盘管理”工具重新给硬盘分区分配盘符。
